"""
测试运行脚本

提供便捷的测试运行方式，支持多种测试选项。
"""
import sys
import subprocess
from pathlib import Path


def main():
    """
    运行测试
    
    支持的命令行参数：
    - 无参数: 运行所有测试
    - --cov: 生成覆盖率报告
    - --verbose: 显示详细输出
    - --failed: 只运行上次失败的测试
    - --markers: 显示所有可用的测试标记
    """
    # 确保在正确的目录
    backend_dir = Path(__file__).parent
    
    # 构建 pytest 命令
    cmd = ["pytest"]
    
    # 解析命令行参数
    if "--cov" in sys.argv or "-c" in sys.argv:
        cmd.extend([
            "--cov=app",
            "--cov-report=html",
            "--cov-report=term-missing"
        ])
        print("📊 将生成覆盖率报告...")
    
    if "--verbose" in sys.argv or "-v" in sys.argv:
        cmd.append("-v")
        print("📝 详细模式...")
    
    if "--failed" in sys.argv or "-f" in sys.argv:
        cmd.append("--lf")
        print("🔄 只运行上次失败的测试...")
    
    if "--markers" in sys.argv or "-m" in sys.argv:
        cmd.append("--markers")
        print("🏷️ 显示所有测试标记...")
    
    # 添加测试目录
    cmd.append("tests/")
    
    print("\n" + "="*60)
    print("🚀 运行测试...")
    print("="*60 + "\n")
    
    # 运行测试
    try:
        result = subprocess.run(cmd, cwd=backend_dir)
        
        if result.returncode == 0:
            print("\n" + "="*60)
            print("✅ 所有测试通过！")
            print("="*60 + "\n")
            
            if "--cov" in sys.argv or "-c" in sys.argv:
                print("📊 覆盖率报告已生成：htmlcov/index.html")
                print("   在浏览器中打开查看详细报告\n")
        else:
            print("\n" + "="*60)
            print("❌ 部分测试失败")
            print("="*60 + "\n")
            sys.exit(1)
            
    except KeyboardInterrupt:
        print("\n\n⚠️  测试被中断")
        sys.exit(1)
    except Exception as e:
        print(f"\n\n❌ 运行测试时出错: {e}")
        sys.exit(1)


def show_help():
    """显示帮助信息"""
    help_text = """
    测试运行脚本
    
    使用方法:
        python run_tests.py [选项]
    
    选项:
        无参数        运行所有测试
        --cov, -c    生成覆盖率报告
        --verbose, -v 显示详细输出
        --failed, -f  只运行上次失败的测试
        --markers, -m 显示所有可用的测试标记
        --help, -h   显示此帮助信息
    
    示例:
        # 运行所有测试
        python run_tests.py
        
        # 生成覆盖率报告
        python run_tests.py --cov
        
        # 详细模式 + 覆盖率
        python run_tests.py -v -c
        
        # 只运行失败的测试
        python run_tests.py --failed
    """
    print(help_text)


if __name__ == "__main__":
    if "--help" in sys.argv or "-h" in sys.argv:
        show_help()
    else:
        main()

